home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2002 November / SGI IRIX 6.5 Applications 2002 November.iso / dist / mpi.idb / usr / include / mpi.h.z / mpi.h
Encoding:
C/C++ Source or Header  |  2002-05-09  |  25.8 KB  |  967 lines

  1. /* $Id: mpi.h,v 1.27 2002/04/03 19:51:45 hpp Exp $ */
  2.  
  3. /*
  4.  *    (C) COPYRIGHT SILICON GRAPHICS, INC.
  5.  *    UNPUBLISHED PROPRIETARY INFORMATION.
  6.  *    ALL RIGHTS RESERVED.
  7.  */
  8.  
  9. /*
  10.  * Copyright Notice
  11.  *  + 1993 University of Chicago
  12.  *  + 1993 Mississippi State University
  13.  */
  14.  
  15. #ifndef MPI_H_INCLUDED
  16. #define MPI_H_INCLUDED
  17.  
  18. #if defined(__cplusplus)
  19. extern "C" {
  20. #endif
  21.  
  22. /******************/
  23. /* MPI-1 bindings */
  24. /******************/
  25.  
  26.  
  27. #define MPI_BOTTOM        ((MPI_Aint)0)
  28.  
  29. typedef long            MPI_Aint;
  30. typedef unsigned int        MPI_Request;
  31. typedef unsigned int        MPI_Group;
  32. typedef unsigned int        MPI_Comm;
  33. typedef unsigned int        MPI_Errhandler;
  34. typedef unsigned int        MPI_Op;
  35. typedef unsigned int        MPI_Datatype;
  36.  
  37. typedef struct { 
  38.     int MPI_SOURCE;
  39.     int MPI_TAG;
  40.     int MPI_ERROR;
  41.     int size;
  42.     int reserved[2];
  43. } MPI_Status;
  44.  
  45. enum {
  46.     MPI_COMM_NULL        = 0,
  47.     MPI_COMM_WORLD        = 1,
  48.     MPI_COMM_SELF        = 2
  49. };
  50.  
  51. enum {
  52.     MPI_ERRHANDLER_NULL    = 0,
  53.     MPI_ERRORS_ARE_FATAL    = 1,
  54.     MPI_ERRORS_RETURN    = 2
  55. };
  56.  
  57. enum {
  58.     MPI_GROUP_NULL        = 0,
  59.     MPI_GROUP_EMPTY        = 1
  60. };
  61.  
  62. enum {
  63.     MPI_REQUEST_NULL    = 0
  64. };
  65.  
  66. enum {
  67.     MPI_OP_NULL        = 0,
  68.     MPI_MAX            = 1,
  69.     MPI_MIN            = 2,
  70.     MPI_SUM            = 3,
  71.     MPI_PROD        = 4,
  72.     MPI_LAND        = 5,
  73.     MPI_BAND         = 6,
  74.     MPI_LOR            = 7,
  75.     MPI_BOR            = 8,
  76.     MPI_LXOR        = 9,
  77.     MPI_BXOR        = 10,
  78.     MPI_MAXLOC        = 11,
  79.     MPI_MINLOC        = 12
  80. };
  81.  
  82. enum {
  83.     MPI_DATATYPE_NULL    = 0,
  84.  
  85.     MPI_CHAR        = 1,
  86.     MPI_SHORT        = 2,
  87.     MPI_INT            = 3,
  88.     MPI_LONG        = 4,
  89.     MPI_UNSIGNED_CHAR    = 5,
  90.     MPI_UNSIGNED_SHORT    = 6,
  91.     MPI_UNSIGNED        = 7,
  92.     MPI_UNSIGNED_LONG    = 8,
  93.     MPI_FLOAT        = 9,
  94.     MPI_DOUBLE        = 10,
  95.     MPI_LONG_DOUBLE        = 11,
  96.     MPI_LONG_LONG        = 12,
  97.  
  98.     MPI_INTEGER        = 13,
  99.     MPI_REAL        = 14,
  100.     MPI_DOUBLE_PRECISION    = 15,
  101.     MPI_COMPLEX        = 16,
  102.     MPI_DOUBLE_COMPLEX    = 17,
  103.     MPI_LOGICAL        = 18,
  104.     MPI_CHARACTER        = 19,
  105.     MPI_INTEGER1        = 20,
  106.     MPI_INTEGER2        = 21,
  107.     MPI_INTEGER4        = 22,
  108.     MPI_INTEGER8        = 23,
  109.     MPI_REAL4        = 24,
  110.     MPI_REAL8        = 25,
  111.     MPI_REAL16        = 26,
  112.  
  113.     MPI_BYTE        = 27,
  114.     MPI_PACKED        = 28,
  115.     MPI_UB            = 29,
  116.     MPI_LB            = 30,
  117.  
  118.     MPI_FLOAT_INT        = 31,
  119.     MPI_DOUBLE_INT        = 32,
  120.     MPI_LONG_INT        = 33,
  121.     MPI_2INT        = 34,
  122.     MPI_SHORT_INT        = 35,
  123.     MPI_LONG_DOUBLE_INT    = 36,
  124.  
  125.     MPI_2REAL        = 37,
  126.     MPI_2DOUBLE_PRECISION    = 38,
  127.     MPI_2INTEGER        = 39,
  128.     _MPI_SGI_TYPE_LAST
  129. };
  130.  
  131. #define MPI_LONG_LONG_INT    MPI_LONG_LONG
  132.  
  133. enum {
  134.     MPI_SUCCESS            = 0,
  135.  
  136.     /* These 19 error codes are specified by the MPI-1 standard */
  137.  
  138.     MPI_ERR_BUFFER            = 1,
  139.     MPI_ERR_COUNT            = 2,
  140.     MPI_ERR_TYPE            = 3,
  141.     MPI_ERR_TAG            = 4,
  142.     MPI_ERR_COMM            = 5,
  143.     MPI_ERR_RANK            = 6,
  144.     MPI_ERR_REQUEST            = 7,
  145.     MPI_ERR_ROOT            = 8,
  146.     MPI_ERR_GROUP            = 9,
  147.     MPI_ERR_OP            = 10,
  148.     MPI_ERR_TOPOLOGY        = 11,
  149.     MPI_ERR_DIMS            = 12,
  150.     MPI_ERR_ARG            = 13,
  151.     MPI_ERR_UNKNOWN            = 14,
  152.     MPI_ERR_TRUNCATE        = 15,
  153.     MPI_ERR_OTHER            = 16,
  154.     MPI_ERR_INTERN            = 17,
  155.     MPI_ERR_IN_STATUS        = 18,
  156.     MPI_ERR_PENDING            = 19,
  157.  
  158.  
  159.     /* Error codes 20-27 used by MPI on T3E systems. */
  160.  
  161.     /* These 34 error codes are specified by the MPI-2 standard */
  162.  
  163.     MPI_ERR_ACCESS            = 28,
  164.     MPI_ERR_AMODE            = 29,
  165.     MPI_ERR_ASSERT            = 30,
  166.     MPI_ERR_BAD_FILE        = 31,
  167.     MPI_ERR_BASE            = 32,
  168.     MPI_ERR_CONVERSION        = 33,
  169.     MPI_ERR_DISP            = 34,
  170.     MPI_ERR_DUP_DATAREP        = 35,
  171.     MPI_ERR_FILE_EXISTS        = 36,
  172.     MPI_ERR_FILE_IN_USE        = 37,
  173.     MPI_ERR_FILE            = 38,
  174.     MPI_ERR_INFO_KEY        = 39,
  175.     MPI_ERR_INFO_NOKEY        = 40,
  176.     MPI_ERR_INFO_VALUE        = 41,
  177.     MPI_ERR_INFO            = 42,
  178.     MPI_ERR_IO            = 43,
  179.     MPI_ERR_KEYVAL            = 44,
  180.     MPI_ERR_LOCKTYPE        = 45,
  181.     MPI_ERR_NAME            = 46,
  182.     MPI_ERR_NO_MEM            = 47,
  183.     MPI_ERR_NOT_SAME        = 48,
  184.     MPI_ERR_NO_SPACE        = 49,
  185.     MPI_ERR_NO_SUCH_FILE        = 50,
  186.     MPI_ERR_PORT            = 51,
  187.     MPI_ERR_QUOTA            = 52,
  188.     MPI_ERR_READ_ONLY        = 53,
  189.     MPI_ERR_RMA_CONFLICT        = 54,
  190.     MPI_ERR_RMA_SYNC        = 55,
  191.     MPI_ERR_SERVICE            = 56,
  192.     MPI_ERR_SIZE            = 57,
  193.     MPI_ERR_SPAWN            = 58,
  194.     MPI_ERR_UNSUPPORTED_DATAREP    = 59,
  195.     MPI_ERR_UNSUPPORTED_OPERATION    = 60,
  196.     MPI_ERR_WIN            = 61,
  197.     MPI_ERR_LASTCODE        = 100    /* last built-in error code */
  198. };
  199.  
  200. enum {
  201.     MPI_KEYVAL_INVALID    = 0,
  202.     MPI_TAG_UB        = 1,
  203.     MPI_HOST        = 2,
  204.     MPI_IO            = 3,
  205.     MPI_WTIME_IS_GLOBAL    = 4,
  206.     MPI_UNIVERSE_SIZE    = 9,
  207.     MPI_APPNUM        = 11
  208. };
  209.  
  210. enum {
  211.     MPI_IDENT        = 0,
  212.     MPI_CONGRUENT        = 1,
  213.     MPI_SIMILAR        = 2,
  214.     MPI_UNEQUAL        = 3
  215. };
  216.  
  217. enum {
  218.     MPI_GRAPH        = 1,
  219.     MPI_CART        = 2
  220. };
  221.  
  222. enum {
  223.     MPI_UNDEFINED        = -3,
  224.     MPI_ANY_SOURCE        = -2,
  225.     MPI_PROC_NULL        = -1
  226. };
  227.  
  228. enum {
  229.     MPI_ANY_TAG        = -1
  230. };
  231.  
  232. enum {
  233.     MPI_BSEND_OVERHEAD    = 32
  234. };
  235.  
  236. enum {
  237.     MPI_MAX_PROCESSOR_NAME    = 256
  238. };
  239.  
  240. enum {
  241.     MPI_MAX_ERROR_STRING    = 256
  242. };
  243.  
  244.  
  245. typedef int MPI_Copy_function(MPI_Comm, int, void *, void *, void *, int *);
  246. typedef int MPI_Delete_function(MPI_Comm, int, void *, void *);
  247. typedef void MPI_Handler_function(MPI_Comm *, int *, ...);
  248. typedef void MPI_User_function(void *, void *, int *, MPI_Datatype *); 
  249.  
  250. MPI_Copy_function        MPI_NULL_COPY_FN, MPI_DUP_FN;
  251. MPI_Delete_function        MPI_NULL_DELETE_FN;
  252.  
  253.  
  254. /*************************************/
  255. /* MPI-1 bindings, sorted by chapter */
  256. /*************************************/
  257.  
  258.  
  259. /* 3.2 */
  260.  
  261. int  MPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  262. int PMPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  263.  
  264. int  MPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  265. int PMPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  266.  
  267. int  MPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  268. int PMPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  269.  
  270. /* 3.4 */
  271.  
  272. int  MPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  273. int PMPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  274.  
  275. int  MPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  276. int PMPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  277.  
  278. int  MPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  279. int PMPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  280.  
  281. /* 3.6 */
  282.  
  283. int  MPI_Buffer_attach(void *, int);
  284. int PMPI_Buffer_attach(void *, int);
  285.  
  286. int  MPI_Buffer_detach(void *, int *);
  287. int PMPI_Buffer_detach(void *, int *);
  288.  
  289. /* 3.7 */
  290.  
  291. int  MPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  292. int PMPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  293.  
  294. int  MPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  295. int PMPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  296.  
  297. int  MPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  298. int PMPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  299.  
  300. int  MPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  301. int PMPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  302.  
  303. int  MPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  304. int PMPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  305.  
  306. int  MPI_Wait(MPI_Request *, MPI_Status *);
  307. int PMPI_Wait(MPI_Request *, MPI_Status *);
  308.  
  309. int  MPI_Test(MPI_Request *, int *, MPI_Status *);
  310. int PMPI_Test(MPI_Request *, int *, MPI_Status *);
  311.  
  312. int  MPI_Request_free(MPI_Request *);
  313. int PMPI_Request_free(MPI_Request *);
  314.  
  315. int  MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  316. int PMPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  317.  
  318. int  MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  319. int PMPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  320.  
  321. int  MPI_Waitall(int, MPI_Request *, MPI_Status *);
  322. int PMPI_Waitall(int, MPI_Request *, MPI_Status *);
  323.  
  324. int  MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  325. int PMPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  326.  
  327. int  MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  328. int PMPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  329.  
  330. int  MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  331. int PMPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  332.  
  333. /* 3.8 */
  334.  
  335. int  MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  336. int PMPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  337.  
  338. int  MPI_Probe(int, int, MPI_Comm, MPI_Status *);
  339. int PMPI_Probe(int, int, MPI_Comm, MPI_Status *);
  340.  
  341. int  MPI_Cancel(MPI_Request *);
  342. int PMPI_Cancel(MPI_Request *);
  343.  
  344. int  MPI_Test_cancelled(MPI_Status *, int *);
  345. int PMPI_Test_cancelled(MPI_Status *, int *);
  346.  
  347. /* 3.9 */
  348.  
  349. int  MPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  350. int PMPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  351.  
  352. int  MPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  353. int PMPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  354.  
  355. int  MPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  356. int PMPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  357.  
  358. int  MPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  359. int PMPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  360.  
  361. int  MPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  362. int PMPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  363.  
  364. int  MPI_Start(MPI_Request *);
  365. int PMPI_Start(MPI_Request *);
  366.  
  367. int  MPI_Startall(int, MPI_Request *);
  368. int PMPI_Startall(int, MPI_Request *);
  369.  
  370. /* 3.10 */
  371.  
  372. int  MPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  373. int PMPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  374.  
  375. int  MPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  376. int PMPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  377.  
  378. /* 3.12 */
  379.  
  380. int  MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  381. int PMPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  382.  
  383. int  MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  384. int PMPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  385.  
  386. int  MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  387. int PMPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  388.  
  389. int  MPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  390. int PMPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  391.  
  392. int  MPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  393. int PMPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  394.  
  395. int  MPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  396. int PMPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  397.  
  398. int  MPI_Address(void *, MPI_Aint *);
  399. int PMPI_Address(void *, MPI_Aint *);
  400.  
  401. int  MPI_Type_extent(MPI_Datatype, MPI_Aint *);
  402. int PMPI_Type_extent(MPI_Datatype, MPI_Aint *);
  403.  
  404. int  MPI_Type_size(MPI_Datatype, int *);
  405. int PMPI_Type_size(MPI_Datatype, int *);
  406.  
  407. int  MPI_Type_lb(MPI_Datatype, MPI_Aint *);
  408. int PMPI_Type_lb(MPI_Datatype, MPI_Aint *);
  409.  
  410. int  MPI_Type_ub(MPI_Datatype, MPI_Aint *);
  411. int PMPI_Type_ub(MPI_Datatype, MPI_Aint *);
  412.  
  413. int  MPI_Type_commit(MPI_Datatype *);
  414. int PMPI_Type_commit(MPI_Datatype *);
  415.  
  416. int  MPI_Type_free(MPI_Datatype *);
  417. int PMPI_Type_free(MPI_Datatype *);
  418.  
  419. int  MPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  420. int PMPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  421.  
  422. /* 3.13 */
  423.  
  424. int  MPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  425. int PMPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  426.  
  427. int  MPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  428. int PMPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  429.  
  430. int  MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  431. int PMPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  432.  
  433. /* 4.3 */
  434.  
  435. int  MPI_Barrier(MPI_Comm);
  436. int PMPI_Barrier(MPI_Comm);
  437.  
  438. /* 4.4 */
  439.  
  440. int  MPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  441. int PMPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  442.  
  443. /* 4.5 */
  444.  
  445. int  MPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  446. int PMPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  447.  
  448. int  MPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  449. int PMPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  450.  
  451. /* 4.6 */
  452.  
  453. int  MPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  454. int PMPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  455.  
  456. int  MPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  457. int PMPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  458.  
  459. /* 4.7 */
  460.  
  461. int  MPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  462. int PMPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  463.  
  464. int  MPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  465. int PMPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  466.  
  467. /* 4.8 */
  468.  
  469. int  MPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  470. int PMPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  471.  
  472. int  MPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  473. int PMPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  474.  
  475. /* 4.9 */
  476.  
  477. int  MPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  478. int PMPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  479.  
  480. int  MPI_Op_create(MPI_User_function *, int, MPI_Op *);
  481. int PMPI_Op_create(MPI_User_function *, int, MPI_Op *);
  482.  
  483. int  MPI_Op_free(MPI_Op *);
  484. int PMPI_Op_free(MPI_Op *);
  485.  
  486. int  MPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  487. int PMPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  488.  
  489. /* 4.10 */
  490.  
  491. int  MPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  492. int PMPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  493.  
  494. /* 4.11 */
  495.  
  496. int  MPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  497. int PMPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  498.  
  499. /* 5.3 */
  500.  
  501. int  MPI_Group_size(MPI_Group, int *);
  502. int PMPI_Group_size(MPI_Group, int *);
  503.  
  504. int  MPI_Group_rank(MPI_Group, int *);
  505. int PMPI_Group_rank(MPI_Group, int *);
  506.  
  507. int  MPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  508. int PMPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  509.  
  510. int  MPI_Group_compare(MPI_Group, MPI_Group, int *);
  511. int PMPI_Group_compare(MPI_Group, MPI_Group, int *);
  512.  
  513. int  MPI_Comm_group(MPI_Comm, MPI_Group *);
  514. int PMPI_Comm_group(MPI_Comm, MPI_Group *);
  515.  
  516. int  MPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  517. int PMPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  518.  
  519. int  MPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  520. int PMPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  521.  
  522. int  MPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  523. int PMPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  524.  
  525. int  MPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  526. int PMPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  527.  
  528. int  MPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  529. int PMPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  530.  
  531. int  MPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  532. int PMPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  533.  
  534. int  MPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  535. int PMPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  536.  
  537. int  MPI_Group_free(MPI_Group *);
  538. int PMPI_Group_free(MPI_Group *);
  539.  
  540. /* 5.4 */
  541.  
  542. int  MPI_Comm_size(MPI_Comm, int *);
  543. int PMPI_Comm_size(MPI_Comm, int *);
  544.  
  545. int  MPI_Comm_rank(MPI_Comm, int *);
  546. int PMPI_Comm_rank(MPI_Comm, int *);
  547.  
  548. int  MPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  549. int PMPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  550.  
  551. int  MPI_Comm_dup(MPI_Comm, MPI_Comm *);
  552. int PMPI_Comm_dup(MPI_Comm, MPI_Comm *);
  553.  
  554. int  MPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  555. int PMPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  556.  
  557. int  MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  558. int PMPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  559.  
  560. int  MPI_Comm_free(MPI_Comm *);
  561. int PMPI_Comm_free(MPI_Comm *);
  562.  
  563. /* 5.6 */
  564.  
  565. int  MPI_Comm_test_inter(MPI_Comm, int *);
  566. int PMPI_Comm_test_inter(MPI_Comm, int *);
  567.  
  568. int  MPI_Comm_remote_size(MPI_Comm, int *);
  569. int PMPI_Comm_remote_size(MPI_Comm, int *);
  570.  
  571. int  MPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  572. int PMPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  573.  
  574. int  MPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  575. int PMPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  576.  
  577. int  MPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  578. int PMPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  579.  
  580. /* 5.7 */
  581.  
  582. int  MPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  583. int PMPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  584.  
  585. int  MPI_Keyval_free(int *);
  586. int PMPI_Keyval_free(int *);
  587.  
  588. int  MPI_Attr_put(MPI_Comm, int, void *);
  589. int PMPI_Attr_put(MPI_Comm, int, void *);
  590.  
  591. int  MPI_Attr_get(MPI_Comm, int, void *, int *);
  592. int PMPI_Attr_get(MPI_Comm, int, void *, int *);
  593.  
  594. int  MPI_Attr_delete(MPI_Comm, int);
  595. int PMPI_Attr_delete(MPI_Comm, int);
  596.  
  597. /* 6.5 */
  598.  
  599. int  MPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  600. int PMPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  601.  
  602. int  MPI_Dims_create(int, int, int *);
  603. int PMPI_Dims_create(int, int, int *);
  604.  
  605. int  MPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  606. int PMPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  607.  
  608. int  MPI_Topo_test(MPI_Comm, int *);
  609. int PMPI_Topo_test(MPI_Comm, int *);
  610.  
  611. int  MPI_Graphdims_get(MPI_Comm, int *, int *);
  612. int PMPI_Graphdims_get(MPI_Comm, int *, int *);
  613.  
  614. int  MPI_Graph_get(MPI_Comm, int, int, int *, int *);
  615. int PMPI_Graph_get(MPI_Comm, int, int, int *, int *);
  616.  
  617. int  MPI_Cartdim_get(MPI_Comm, int *);
  618. int PMPI_Cartdim_get(MPI_Comm, int *);
  619.  
  620. int  MPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  621. int PMPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  622.  
  623. int  MPI_Cart_rank(MPI_Comm, int *, int *);
  624. int PMPI_Cart_rank(MPI_Comm, int *, int *);
  625.  
  626. int  MPI_Cart_coords(MPI_Comm, int, int, int *);
  627. int PMPI_Cart_coords(MPI_Comm, int, int, int *);
  628.  
  629. int  MPI_Graph_neighbors_count(MPI_Comm, int, int *);
  630. int PMPI_Graph_neighbors_count(MPI_Comm, int, int *);
  631.  
  632. int  MPI_Graph_neighbors(MPI_Comm, int, int, int *);
  633. int PMPI_Graph_neighbors(MPI_Comm, int, int, int *);
  634.  
  635. int  MPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  636. int PMPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  637.  
  638. int  MPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  639. int PMPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  640.  
  641. int  MPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  642. int PMPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  643.  
  644. int  MPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  645. int PMPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  646.  
  647. /* 7.1 */
  648.  
  649. int  MPI_Get_processor_name(char *, int *);
  650. int PMPI_Get_processor_name(char *, int *);
  651.  
  652. /* 7.2 */
  653.  
  654. int  MPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  655. int PMPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  656.  
  657. int  MPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  658. int PMPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  659.  
  660. int  MPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  661. int PMPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  662.  
  663. int  MPI_Errhandler_free(MPI_Errhandler *);
  664. int PMPI_Errhandler_free(MPI_Errhandler *);
  665.  
  666. int  MPI_Error_string(int, char *, int *);
  667. int PMPI_Error_string(int, char *, int *);
  668.  
  669. /* 7.3 */
  670.  
  671. int  MPI_Error_class(int, int *);
  672. int PMPI_Error_class(int, int *);
  673.  
  674. /* 7.4 */
  675.  
  676. double  MPI_Wtime(void);
  677. double PMPI_Wtime(void);
  678.  
  679. double  MPI_Wtick(void);
  680. double PMPI_Wtick(void);
  681.  
  682. /* 7.5 */
  683.  
  684. int  MPI_Init(int *, char ***);
  685. int PMPI_Init(int *, char ***);
  686.  
  687. int  MPI_Finalize(void);
  688. int PMPI_Finalize(void);
  689.  
  690. int  MPI_Initialized(int *);
  691. int PMPI_Initialized(int *);
  692.  
  693. int  MPI_Abort(MPI_Comm, int);
  694. int PMPI_Abort(MPI_Comm, int);
  695.  
  696. /* 8.3 */
  697.  
  698. int  MPI_Pcontrol(int, ...);
  699. int PMPI_Pcontrol(int, ...);
  700.  
  701. /********************/
  702. /* MPI-1.2 bindings */
  703. /********************/
  704.  
  705. #define MPI_VERSION        1
  706. #define MPI_SUBVERSION        2
  707.  
  708. int  MPI_Get_version(int *, int *);
  709. int PMPI_Get_version(int *, int *);
  710.  
  711.  
  712. /*************************************/
  713. /* MPI-2 bindings, sorted by chapter */
  714. /*************************************/
  715.  
  716. /* 4.10 */
  717.  
  718. typedef unsigned int          MPI_Info;
  719.  
  720. enum {
  721.     MPI_INFO_NULL        = 0,
  722.     MPI_MAX_INFO_KEY        = 255,
  723.     MPI_MAX_INFO_VAL        = 1024
  724. };
  725.  
  726. enum {
  727.     MPI_FUNDAMENTAL        = -1
  728. };
  729.  
  730. int  MPI_Info_create(MPI_Info *);
  731. int  PMPI_Info_create(MPI_Info *);
  732.  
  733. int MPI_Info_delete(MPI_Info, char *);
  734. int PMPI_Info_delete(MPI_Info, char *);
  735.  
  736. int MPI_Info_dup(MPI_Info, MPI_Info *);
  737. int PMPI_Info_dup(MPI_Info, MPI_Info *);
  738.  
  739. int MPI_Info_free(MPI_Info *);
  740. int PMPI_Info_free(MPI_Info *);
  741.  
  742. int MPI_Info_get(MPI_Info, char *, int, char *, int *);
  743. int PMPI_Info_get(MPI_Info, char *, int, char *, int *);
  744.  
  745. int MPI_Info_get_nkeys(MPI_Info, int *);
  746. int PMPI_Info_get_nkeys(MPI_Info, int *);
  747.  
  748. int MPI_Info_get_nthkey(MPI_Info, int, char *);
  749. int PMPI_Info_get_nthkey(MPI_Info, int, char *);
  750.  
  751. int MPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
  752. int PMPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
  753.  
  754. int MPI_Info_set(MPI_Info, char *, char *);
  755. int PMPI_Info_set(MPI_Info, char *, char *);
  756.  
  757. /* 4.11 */
  758.  
  759. int MPI_Alloc_mem(MPI_Aint,MPI_Info,void *);
  760. int PMPI_Alloc_mem(MPI_Aint,MPI_Info,void *);
  761.  
  762. int MPI_Free_mem(void *);
  763. int PMPI_Free_mem(void *);
  764.  
  765. /* 4.12 */
  766.  
  767. typedef int MPI_Fint;
  768.  
  769. MPI_Fint MPI_Info_c2f(MPI_Info);
  770. MPI_Fint PMPI_Info_c2f(MPI_Info);
  771.  
  772. MPI_Info MPI_Info_f2c(MPI_Fint);
  773. MPI_Info PMPI_Info_f2c(MPI_Fint);
  774.  
  775. MPI_Fint MPI_Comm_c2f(MPI_Comm);
  776. MPI_Fint PMPI_Comm_c2f(MPI_Comm);
  777.  
  778. MPI_Comm MPI_Comm_f2c(MPI_Fint);
  779. MPI_Comm PMPI_Comm_f2c(MPI_Fint);
  780.  
  781. MPI_Fint MPI_Type_c2f(MPI_Datatype);
  782. MPI_Fint PMPI_Type_c2f(MPI_Datatype);
  783.  
  784. MPI_Datatype MPI_Type_f2c(MPI_Fint);
  785. MPI_Datatype PMPI_Type_f2c(MPI_Fint);
  786.  
  787. MPI_Fint MPI_Group_c2f(MPI_Group);
  788. MPI_Fint PMPI_Group_c2f(MPI_Group);
  789.  
  790. MPI_Group MPI_Group_f2c(MPI_Fint);
  791. MPI_Group PMPI_Group_f2c(MPI_Fint);
  792.  
  793. MPI_Fint MPI_Request_c2f(MPI_Request);
  794. MPI_Fint PMPI_Request_c2f(MPI_Request);
  795.  
  796. MPI_Request MPI_Request_f2c(MPI_Fint);
  797. MPI_Request PMPI_Request_f2c(MPI_Fint);
  798.  
  799. MPI_Fint MPI_Op_c2f(MPI_Op);
  800. MPI_Fint PMPI_Op_c2f(MPI_Op);
  801.  
  802. MPI_Op MPI_Op_f2c(MPI_Fint);
  803. MPI_Op PMPI_Op_f2c(MPI_Fint);
  804.  
  805.  
  806. /* 4.14 */
  807.  
  808. int  MPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  809. int PMPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  810.  
  811. int  MPI_Type_create_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  812. int PMPI_Type_create_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  813.  
  814. int  MPI_Type_create_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  815. int PMPI_Type_create_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  816.  
  817. int MPI_Get_address(void *, MPI_Aint *);
  818. int PMPI_Get_address(void *, MPI_Aint *);
  819.  
  820. /* 5.3 */
  821.  
  822. #define MPI_ARGV_NULL              ((char **)NULL)
  823. #define MPI_ARGVS_NULL              ((char ***)NULL)
  824. #define MPI_ERRCODES_IGNORE        ((int *)NULL)
  825.  
  826. int MPI_Comm_spawn(char *, char **, int, MPI_Info, int, MPI_Comm, MPI_Comm *, int *);
  827. int PMPI_Comm_spawn(char *, char **, int, MPI_Info, int, MPI_Comm, MPI_Comm *, int *);
  828. int MPI_Comm_spawn_multiple(int , char **, char ***, int *, MPI_Info *,
  829.                             int , MPI_Comm, MPI_Comm *, int *); 
  830. int PMPI_Comm_spawn_multiple(int , char **, char ***, int *, MPI_Info *,
  831.                             int , MPI_Comm, MPI_Comm *, int *); 
  832. int MPI_Comm_get_parent(MPI_Comm *);
  833. int PMPI_Comm_get_parent(MPI_Comm *);
  834.  
  835. /* 6 */
  836.  
  837. /* MPI one-sided is supported only under ABI 64.  */
  838. #if     !_ABIN32
  839.  
  840. typedef unsigned int MPI_Win;
  841.  
  842. enum {
  843.     MPI_WIN_NULL     = 0
  844. };
  845.  
  846. /* referenced in 4.12 of MPI-2 standard with other transfer of handles functions */
  847.  
  848. MPI_Fint MPI_Win_c2f(MPI_Win);
  849. MPI_Fint PMPI_Win_c2f(MPI_Win);
  850.  
  851. MPI_Win MPI_Win_f2c(MPI_Fint);
  852. MPI_Win PMPI_Win_f2c(MPI_Fint);
  853.  
  854. /* 6.2 */
  855.  
  856. int  MPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
  857. int PMPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
  858.  
  859. int  MPI_Win_fence(int, MPI_Win);
  860. int PMPI_Win_fence(int, MPI_Win);
  861.  
  862. int  MPI_Win_free(MPI_Win *);
  863. int PMPI_Win_free(MPI_Win *);
  864.  
  865. /* 6.3 */
  866.  
  867.  
  868. int  MPI_Put(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  869.     MPI_Win);
  870. int PMPI_Put(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  871.     MPI_Win);
  872.  
  873. int  MPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  874.     MPI_Win);
  875. int PMPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  876.     MPI_Win);
  877.  
  878. int  MPI_Accumulate(void *, int, MPI_Datatype, int, MPI_Aint, int,
  879.     MPI_Datatype, MPI_Op, MPI_Win);
  880. int PMPI_Accumulate(void *, int, MPI_Datatype, int, MPI_Aint, int,
  881.     MPI_Datatype, MPI_Op, MPI_Win);
  882.  
  883. /* 6.4 */
  884.  
  885. enum {
  886.     MPI_MODE_NOCHECK    = 1,
  887.     MPI_MODE_NOSTORE    = 2,
  888.     MPI_MODE_NOPUT        = 4,
  889.     MPI_MODE_NOPRECEDE    = 8,
  890.     MPI_MODE_NOSUCCEED     = 16
  891. };
  892.  
  893.  
  894. #endif    /* !_ABIN32 */
  895.  
  896.  
  897. /* 7.5 */
  898.  
  899. int  MPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  900. int PMPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  901.  
  902. int  MPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  903. int PMPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  904.  
  905. /* 7.8 */
  906.  
  907. int  MPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  908. int PMPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  909.  
  910. /* 8.6 */
  911.  
  912. enum {
  913.     MPI_COMBINER_NAMED          = (-1),
  914.     MPI_COMBINER_CONTIGUOUS     = 0,
  915.     MPI_COMBINER_VECTOR         = 1,
  916.     MPI_COMBINER_HVECTOR        = 2,
  917.     MPI_COMBINER_INDEXED        = 3,
  918.     MPI_COMBINER_HINDEXED       = 4,
  919.     MPI_COMBINER_STRUCT         = 5,
  920.     MPI_COMBINER_DARRAY        = 6,
  921.     MPI_COMBINER_DUP        = 7,
  922.     MPI_COMBINER_F90_COMPLES    = 8,
  923.     MPI_COMBINER_F90_INTEGER    = 9,
  924.     MPI_COMBINER_F90_REAL        = 10,
  925.     MPI_COMBINER_HINDEXED_INTEGER    = 11,
  926.     MPI_COMBINER_HVECTOR_INTEGER    = 12,
  927.     MPI_COMBINER_INDEXED_BLOCK    = 13,
  928.     MPI_COMBINER_RESIZED        = 14,
  929.     MPI_COMBINER_STRUCT_INTEGER    = 15,
  930.     MPI_COMBINER_SUBARRAY        = 16
  931. };
  932.  
  933. /* 8.7 */
  934.  
  935. int  MPI_Init_thread(int *, char ***, int, int *);
  936. int PMPI_Init_thread(int *, char ***, int, int *);
  937. int  MPI_Query_thread(int *);
  938. int PMPI_Query_thread(int *);
  939. int  MPI_Is_thread_main(int *);
  940. int PMPI_Is_thread_main(int *);
  941.  
  942. enum {
  943.     MPI_THREAD_SINGLE        = 0,
  944.     MPI_THREAD_FUNNELED        = 1,
  945.     MPI_THREAD_SERIALIZED        = 2,
  946.     MPI_THREAD_MULTIPLE        = 3
  947. };
  948.  
  949. /* 9.6 */
  950.  
  951. int  MPI_Finalized(int *);
  952. int PMPI_Finalized(int *);
  953.  
  954. #if defined(__cplusplus)
  955. }
  956. #if !defined(MPI_NO_CPPBIND)
  957. #include "mpi++.h"
  958. #endif
  959. #endif
  960.  
  961. /*
  962.  * mpio.h must be included after mpi.h 
  963.  */
  964. #include "mpio.h"
  965.  
  966. #endif    /* MPI_H_INCLUDED */
  967.